<?php
/**
 * EgpusersDao.class.php
 * 
 * (C) 2009, tetsuya.odaka(EzoGP).
 * 
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 * 
 *      http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

/* 
 * EGP_USERSのためのDao
 * 
 * 		author	；	t.odaka
 * 		date	;	2009/5/26
 * 
 */
class EgpusersDao {
	/*
	* プロパティー 
	*/
	var $Id, 
		$Email, 
		$Password, 
		$Name, 
		$NameYomi,
		$Role,
		$TableName = 'EGP_USERS';

    /* 
	 * デフォルトのコンストラクタ 
	 */
	function __construct() {
	}

	/* 
	 * Getter 
	 */
	function getId(){return $this->Id;}
	function getEmail(){return $this->Email;}
	function getPassword(){return $this->Password;}
	function getName(){return $this->Name;}
	function getNameYomi(){return $this->NameYomi;}
	function getRole(){return $this->Role;}
		
	/* 
	 * Setter 
	 */
	function setId($_str){$this->Id = intval($_str);}
	function setEmail($_str){$this->Email = $_str;}
	function setPassword($_str){$this->Password = $_str;}
	function setName($_str){$this->Name = $_str;}
	function setNameYomi($_str){$this->NameYomi = $_str;}
	function setRole($_str){$this->Role = $_str;}
		
	/*
	 * 全データの取得
	 * 
	 * 	戻り値；　
	 * 		配列: RDBのデータを当オブジェクトでラップした、Bean配列。
	 *
	 */
	function getAll($conn){
		require("../Myznala/debugLog.php");
		
		$sql = 'select * from '.$this->TableName.';';
	
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		$res = $conn->query($sql);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}
		
		$i=0;
		$rArr=array();
		while($row = $res->fetchRow()){

			$obj = new EgpusersDao();
			$obj->setId($row["id"]);
			$obj->setEmail($row["email"]);
			$obj->setPassword($row["password"]);
			$obj->setName($row["name"]);
			$obj->setNameYomi($row["name_yomi"]);
			$obj->setRole($row["role"]);
			
			$rArr[$i]=$obj;
			$i++;
		}
		return $rArr;
	}
	
	/*
	 * Emailでソートされたデータの取得
	 * 
	 * 	戻り値；　
	 * 		配列: RDBのデータを当オブジェクトでラップした、Bean配列。
	 *
	 */
	function getAllSortedByEmail($conn, $email){
		require("../Myznala/debugLog.php");
		
		$sql = 'select * from '.$this->TableName.' where email >= "'.$email.'" order by email;';
	
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		$res = $conn->query($sql);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}
		
		$i=0;
		$rArr=array();
		while($row = $res->fetchRow()){

			$obj = new EgpusersDao();
			$obj->setId($row["id"]);
			$obj->setEmail($row["email"]);
			$obj->setPassword($row["password"]);
			$obj->setName($row["name"]);
			$obj->setNameYomi($row["name_yomi"]);
			$obj->setRole($row["role"]);
			
			$rArr[$i]=$obj;
			$i++;
		}
		return $rArr;
	}
	
	/*
	 * 新規Idの登録
	 * 
	 * 	戻り値；　
	 * 		id:		存在するidのmax値+1
	 *
	 */
	function getNewId($conn){
		require('../Myznala/debugLog.php');
		
		// sql statementの設定
		$sql = "select max(id) from ".$this->TableName.";";
		
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ORDERED);

		$res = $conn->query($sql);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}
		
		// 上にセットした、fetch modeでの読み込み
		$row = $res->fetchRow();
		
		return $row[0]+1;
	}

	/*
	 * Emailアドレスが存在するか？
	 * 
	 * 	戻り値；　
	 * 		true	存在する場合
	 * 		false	存在しない場合
	 *
	 */
	function findEmail($conn, $email){
		require('../Myznala/debugLog.php');
		
		// sql statementの設定
		$sql = "select count(*) from ".$this->TableName." where email = ?;";
		
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ORDERED);

		// prepared statementの引数の定義
		$arg_type=	array(
						'text'
					);
		
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		
		// prepared statementの実行
		$res = $stt->execute(array($email));
		if(MDB2::isError($res)){
			die($res->getMessage());
		}
		// 上にセットした、fetch modeでの読み込み
		$row = $res->fetchRow();
		
//		$myDebugLog->debug('$row[0] '.$row[0]);
		
		if($row == null || $row[0] == 0){
			return false;
		}
		return true;
	}
	
	
	/*
	 * レコードの登録
	 * 
	 * 	戻り値；　
	 * 		true	成功
	 * 		失敗の場合は、死ぬ。
	 *
	 */
	function insert($conn){
		require('../Myznala/debugLog.php');
	
		// prepared statement
		$sql = "insert into EGP_USERS values(?,?,?,?,?,?);";
		
		// prepared statementの引数
		$arg_type=array(
					'integer', // ID
					'text', // Email
					'text', // Password
					'text', // Name
					'text', // NameYomi
					'text'  // Role
				);

		// prepared statementの作成
		$stt = $conn->prepare($sql, $arg_type, MDB2_PREPARE_MANIP);
		// prepared statementの引数のセット

		$iArr=array(
				$this->Id,
				$this->Email,
				$this->Password,
				$this->Name,
				$this->NameYomi,
				$this->Role
			);
		
		// prepared statementの実行
		$res = $stt->execute($iArr);
		if(MDB2::isError($res)){
			die($res->getMessage());
		}

		return true;
	
	}

	/*
	 * レコードの更新
	 * 
	 * 	戻り値；　
	 * 		true	成功
	 * 		失敗の場合は、死ぬ。
	 *
	 */
	function update($conn){
		require('../Myznala/debugLog.php');
	
		// prepared statement
		$sql = "update EGP_USERS set 
				password=?, name=?, name_yomi=?, role=? where id=?;";
		
		// prepared statementの引数
		$arg_type=array(
			'text',
			'text',
			'text',
			'text',
			'integer');
		
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type,MDB2_PREPARE_MANIP);

		// prepared statementの引数のセット
		$update_array=array(
			$this->Password,
			$this->Name,
			$this->NameYomi,
			$this->Role,
			$this->Id
		);
			
		// prepared statementの実行
		$result = $stt->execute($update_array);
		if(MDB2::isError($conn)){
			die($result->$conn->getMessage());
		}
		
		return true;
	}

	/*
	 * レコードの削除
	 * 
	 * 	戻り値；　
	 * 		true	成功
	 * 		失敗の場合は、死ぬ。
	 */
	function delete($conn){
		require('../Myznala/debugLog.php');
	
		$sql = "delete from EGP_USERS where id=?;";
		
		// prepared statementの引数
		$arg_type=array(
			'integer'
		);
		
		// prepared statementの作成
		$stt = $conn->prepare($sql, $arg_type, MDB2_PREPARE_MANIP);
		// prepared statementの引数のセット
		$delete_array=array(
			$this->Id
		);
			
		// prepared statementの実行
		$res = $stt->execute($delete_array);
		if(MDB2::isError($conn)){
			die($res->getMessage());
		}
		
		return true;
	}
	
	/*
	 * Idでデータを取得する
	 * 
	 * 	戻り値；　
	 * 		成功の場合は、EgpusersDaoのオブジェクト
	 * 		失敗の場合は、null。
	 */
	function findId($conn,$id){

		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		// prepared statementの設定
		$sql = "select * from EGP_USERS where id=?;";
		// prepared statementの引数
		$arg_type=array('integer');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		
		// prepared statementの実行
		$result = $stt->execute(array($id));
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		
		// 上に定義した、fetch modeでの読み込み。
		$row = $result->fetchRow();

		$obj = new EgpusersDao();
		$obj->setId($row["id"]);
		$obj->setEmail($row["email"]);
		$obj->setPassword($row["password"]);
		$obj->setName($row["name"]);
		$obj->setNameYomi($row["name_yomi"]);
		$obj->setRole($row["role"]);

		return $obj;
	}
	
	/*
	 * Idでデータを取得する
	 * 
	 * 	戻り値；　
	 * 		成功の場合は、EgpusersDaoのオブジェクト
	 * 		失敗の場合は、null。
	 */
	function findById($conn,$id){

		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		// prepared statementの設定
		$sql = "select * from EGP_USERS where id=?;";
		// prepared statementの引数
		$arg_type=array('integer');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		
		// prepared statementの実行
		$result = $stt->execute(array($id));
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		
		// 上に定義した、fetch modeでの読み込み。
		$row = $result->fetchRow();

		return $row;
	}
	
	/*
	 * Emailでデータを取得する
	 * 
	 * 	戻り値；　
	 * 		成功の場合は、EgpusersDaoのオブジェクト
	 * 		失敗の場合は、null。
	 */
	function findByEmail($conn){
		require('../Myznala/debugLog.php');
	
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ASSOC);
		
		// prepared statementの設定
		$sql = "select * from ".$this->TableName." where email=?;";
		// prepared statementの引数
		$arg_type=array('text');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);

//		$myDebugLog->debug('$sql '.$sql);
//		$myDebugLog->debug('$this->Email '.$this->Email);
		
		// prepared statementの実行
		$result = $stt->execute(
			array($this->Email)
		);
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		
		// 上に定義した、fetch modeでの読み込み。
		$row = $result->fetchRow();
		
		return $row;
	}
	
	/*
	 * Idの存在チェック
	 * 
	 * 	戻り値；　
	 * 		countの値
	 */
	function findUserId($conn,$id){
		require('../Myznala/debugLog.php');
		
		// prepared statementの設定
		$sql = "select count(*) from EGP_USERS where id=?;";
		
		// fetch modeの設定
		$conn->setFetchMode(MDB2_FETCHMODE_ORDERED);
		// prepared statementの引数の定義
		$arg_type=array('integer');
		// prepared statementの作成
		$stt = $conn->prepare($sql,$arg_type);
		
		// prepared statementの実行
		$result = $stt->execute(array($id));
		if(MDB2::isError($result)){
			die($result->getMessage());
		}
		// 上にセットした、fetch modeでの読み込み
		$row = $result->fetchRow();
		
		return $row[0];
	}
	
}
?>